Fix IOCTL_PRIVCMD_GET_MACH2PHYS_MFNS to work properly for
authorkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Thu, 17 Nov 2005 10:47:49 +0000 (11:47 +0100)
committerkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Thu, 17 Nov 2005 10:47:49 +0000 (11:47 +0100)
4MB superpages (32-bit non-pae).

Signed-off-by: Keir Fraser <keir@xensource.com>
linux-2.6-xen-sparse/drivers/xen/privcmd/privcmd.c

index 015e4a8d132e8edea7127e7a34db5eedf0023b35..5239a18fc60645e4be0444aff939f732ad90d299 100644 (file)
@@ -219,7 +219,6 @@ static int privcmd_ioctl(struct inode *inode, struct file *file,
 
 #ifndef __ia64__
        case IOCTL_PRIVCMD_GET_MACH2PHYS_MFNS: {
-
                pgd_t *pgd; 
                pud_t *pud; 
                pmd_t *pmd; 
@@ -235,13 +234,13 @@ static int privcmd_ioctl(struct inode *inode, struct file *file,
 
                p = m.arr; 
 
-               for(i=0; i < m.num; i++) { 
-
+               for (i=0; i < m.num; i++) { 
                        pgd = pgd_offset_k(m2pv);
                        pud = pud_offset(pgd, m2pv);
                        pmd = pmd_offset(pud, m2pv);
-                       m2p_mfn = (*(uint64_t *)pmd >> PAGE_SHIFT)&0xFFFFFFFF;
-                       
+                       m2p_mfn  = (*(uint64_t *)pmd >> PAGE_SHIFT)&0xFFFFFFFF;
+                       m2p_mfn += pte_index(m2pv);
+
                        if (put_user(m2p_mfn, p + i))
                                return -EFAULT;